﻿// Fill out your copyright notice in the Description page of Project Settings.


#include "Play/StarrySkyPlayerState.h"

#include "AbilitySystem/StarrySkyAbilitySystemComponent.h"
#include "AbilitySystem/StarrySkyAttributeSet.h"
#include "Net/UnrealNetwork.h"

AStarrySkyPlayerState::AStarrySkyPlayerState()
{
	//构造函数中创建ASC和AS，并且设置IsReplicated为true，设置复制模式为Mixed。Mixed：仅将最小的游戏效果信息复制到模拟代理，但将完整信息复制到所有者和自主代理
	AbilitySystemComponent=CreateDefaultSubobject<UStarrySkyAbilitySystemComponent>("AbilitySystemComponent");
	AbilitySystemComponent->SetIsReplicated(true);
	AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
	AttributeSet=CreateDefaultSubobject<UStarrySkyAttributeSet>("AttributeSet");
	//NetUpdateFrequency = 100.f; 弃用这个属性
	/**
	 *用来设置Actor在网络上的更新频率的方法
	 *具体来说：
	 * SetNetUpdateFrequency(100.f)将玩家状态的网络更新频率设置为每秒100次
	 * 这意味着服务器每0.01秒（10毫秒）就会向客户端发送一次该玩家状态的更新信息
	 * 较高的更新频率可以让游戏状态在网络间同步得更及时，减少延迟感，但也会增加网络流量
	 * 对于玩家状态这类重要且频繁变化的数据，设置较高的更新频率（如100Hz）是合理的
	 **/
	SetNetUpdateFrequency(100.f);
}

void AStarrySkyPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);
	DOREPLIFETIME(AStarrySkyPlayerState, Level);
}

UAbilitySystemComponent* AStarrySkyPlayerState::GetAbilitySystemComponent() const
{
	return AbilitySystemComponent;
}

void AStarrySkyPlayerState::OnRep_Level(int32 OldLevel) const
{
}
